#ifndef _SGF_STRING_H_
#define _SGF_STRING_H_

#include <iostream>
#include "Type.h"

namespace SGF
{
	class String
	{
	private:
		UInt8* _string;
		UInt64 _length;
	public:
		String();
		String(UInt64 length, UInt8 c = ' ');
		String(const String& src);
		String(UInt8* src);
		String(char* src);
		~String();
		String& operator=(const String& src);
		String& operator=(UInt8* src);
		bool operator==(const String& src);
		bool operator==(UInt8* src);
		bool operator!=(const String& src);
		bool operator!=(UInt8* src);
		UInt8& operator[](UInt64 index);
		String operator+(const String& src);
		String operator+(UInt8* src);
		String& operator+=(const String& src);
		String& operator+=(UInt8* src);
		UInt64 GetLength();
		static UInt8* String2Char(const String& src);
		void Clear();
		void Print();
		friend std::ostream& operator << (std::ostream& stream, String& src);
	};
}

#endif